/*
 * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Oracle or the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */ 

import java.net.*;
import java.io.*;

import com.example.asockets.msg;
import com.google.gson.Gson;

public class OOserver {
    public static void main(String[] args) throws IOException {

        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(4444);
            System.out.println(serverSocket.getLocalSocketAddress());
            System.out.println(serverSocket);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 4444.");
            System.exit(1);
        }
        
        System.out.println("server socket active");
        
        Gson gson = new Gson();			
		msg msgMessage = new msg("android device connected");
		String json = gson.toJson(msgMessage);
		System.out.println(json);

        Socket clientSocket = null;
        try {
            clientSocket = serverSocket.accept();
        } catch (IOException e) {
            System.err.println("Accept failed.");
            System.exit(1);
        }
        
        System.out.println("client socket active");
       

        ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream()); //WRITES TO CLIENT STREAM
        ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());
		
     //   String inputLine, outputLine;
       // outputLine = "";
//        KnockKnockProtocol kkp = new KnockKnockProtocol();
//
//        outputLine = kkp.processInput(null);
        //out.println(outputLine);

        while (in != null) {
        	msg message = null;
        	//msg sendMsg = new msg("hello client");
        	
        	String str = null;
        	
        	try {
				//message = (msg) in.readObject();
				//System.out.println(message.getString());
        		
        		str = (String) in.readObject();
        		
        		out.writeObject("hello android lol");
        		
        		message = gson.fromJson(str, msg.class);   
        		//System.out.println(str);
        		System.out.println(message.getString());
				
				
				
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        	
        	
        
        
        catch (EOFException e) {
        	
			// TODO Auto-generated catch block
			e.printStackTrace();
			break;
		}
        	
//             //outputLine = kkp.processInput(inputLine);
//        	outputLine = inputLine;
//             out.println(outputLine + " waste");
//             out.println(serverSocket.getLocalSocketAddress());
//             if (outputLine.equals("Bye."))
//                break;
        }
        out.close();
        in.close();
        clientSocket.close();
        serverSocket.close();
    }
}
